{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from math import ceil\n",
    "import torch\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import sys\n",
    "sys.path.append('..')\n",
    "from utils.input_pipeline import get_image_folders\n",
    "from utils.training import train, optimization_step\n",
    "from utils.diagnostic import count_params\n",
    "    \n",
    "torch.cuda.is_available()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "torch.backends.cudnn.benchmark = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Create data iterators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 128"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100000"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_folder, val_folder = get_image_folders()\n",
    "\n",
    "train_iterator = DataLoader(\n",
    "    train_folder, batch_size=batch_size, num_workers=4,\n",
    "    shuffle=True, pin_memory=True\n",
    ")\n",
    "\n",
    "val_iterator = DataLoader(\n",
    "    val_folder, batch_size=256, num_workers=4,\n",
    "    shuffle=False, pin_memory=True\n",
    ")\n",
    "\n",
    "# number of training samples\n",
    "train_size = len(train_folder.imgs)\n",
    "train_size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10000"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# number of validation samples\n",
    "val_size = len(val_folder.imgs)\n",
    "val_size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from get_densenet import get_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "model, loss, optimizer = get_model()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "440264"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# number of params in the model\n",
    "count_params(model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "782"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from torch.optim.lr_scheduler import ReduceLROnPlateau\n",
    "\n",
    "n_epochs = 200\n",
    "n_batches = ceil(train_size/batch_size)\n",
    "\n",
    "lr_scheduler = ReduceLROnPlateau(\n",
    "    optimizer, mode='max', factor=0.1, patience=4, \n",
    "    verbose=True, threshold=0.01, threshold_mode='abs'\n",
    ")\n",
    "\n",
    "# total number of batches in the train set\n",
    "n_batches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0  4.623 4.219  0.064 0.113  0.195 0.304  228.915\n",
      "1  4.078 3.956  0.125 0.156  0.328 0.374  226.131\n",
      "2  3.802 3.467  0.165 0.217  0.397 0.480  226.623\n",
      "3  3.614 3.394  0.194 0.228  0.441 0.487  226.667\n",
      "4  3.476 3.223  0.217 0.252  0.473 0.524  226.629\n",
      "5  3.365 3.118  0.238 0.284  0.499 0.557  226.626\n",
      "6  3.280 3.092  0.254 0.290  0.516 0.568  226.645\n",
      "7  3.220 3.040  0.263 0.291  0.533 0.572  226.711\n",
      "8  3.161 3.067  0.274 0.293  0.545 0.566  226.695\n",
      "9  3.111 2.942  0.282 0.317  0.557 0.600  226.587\n",
      "10  3.073 2.883  0.289 0.332  0.564 0.618  226.699\n",
      "11  3.046 2.810  0.294 0.341  0.571 0.629  226.718\n",
      "12  3.016 2.951  0.300 0.321  0.578 0.605  226.733\n",
      "13  2.980 2.919  0.307 0.327  0.585 0.611  226.702\n",
      "14  2.960 2.757  0.310 0.356  0.588 0.637  226.604\n",
      "15  2.937 2.965  0.316 0.323  0.593 0.611  226.718\n",
      "16  2.924 2.780  0.319 0.348  0.595 0.633  226.685\n",
      "17  2.908 2.835  0.321 0.343  0.600 0.623  226.650\n",
      "18  2.889 2.712  0.327 0.369  0.605 0.646  226.662\n",
      "19  2.870 2.662  0.328 0.373  0.608 0.660  226.691\n",
      "20  2.852 2.773  0.333 0.349  0.612 0.634  226.673\n",
      "21  2.847 2.694  0.333 0.373  0.612 0.656  226.466\n",
      "22  2.835 2.647  0.336 0.375  0.613 0.658  226.435\n",
      "23  2.825 2.704  0.339 0.367  0.617 0.651  226.411\n",
      "Epoch    23: reducing learning rate of group 0 to 1.0000e-02.\n",
      "Epoch    23: reducing learning rate of group 1 to 1.0000e-02.\n",
      "Epoch    23: reducing learning rate of group 2 to 1.0000e-02.\n",
      "Epoch    23: reducing learning rate of group 3 to 1.0000e-02.\n",
      "24  2.519 2.276  0.399 0.450  0.675 0.724  226.405\n",
      "25  2.423 2.283  0.419 0.449  0.694 0.727  226.493\n",
      "26  2.392 2.260  0.424 0.460  0.698 0.728  226.522\n",
      "27  2.365 2.241  0.431 0.459  0.703 0.731  226.555\n",
      "28  2.352 2.273  0.430 0.456  0.706 0.726  226.581\n",
      "29  2.333 2.231  0.436 0.467  0.709 0.736  226.494\n",
      "30  2.314 2.220  0.439 0.466  0.711 0.735  226.581\n",
      "31  2.315 2.192  0.439 0.475  0.712 0.742  226.569\n",
      "32  2.298 2.206  0.442 0.468  0.717 0.740  226.583\n",
      "33  2.287 2.188  0.445 0.474  0.717 0.742  226.521\n",
      "34  2.287 2.209  0.446 0.470  0.717 0.740  226.559\n",
      "35  2.274 2.226  0.445 0.468  0.721 0.737  226.567\n",
      "36  2.265 2.201  0.449 0.475  0.721 0.742  226.613\n",
      "Epoch    36: reducing learning rate of group 0 to 1.0000e-03.\n",
      "Epoch    36: reducing learning rate of group 1 to 1.0000e-03.\n",
      "Epoch    36: reducing learning rate of group 2 to 1.0000e-03.\n",
      "Epoch    36: reducing learning rate of group 3 to 1.0000e-03.\n",
      "37  2.189 2.146  0.464 0.485  0.735 0.749  226.720\n",
      "38  2.178 2.140  0.468 0.483  0.737 0.750  226.764\n",
      "39  2.166 2.125  0.469 0.486  0.739 0.752  226.727\n",
      "40  2.169 2.135  0.470 0.487  0.738 0.751  226.720\n",
      "41  2.157 2.138  0.472 0.483  0.740 0.751  226.743\n",
      "42  2.159 2.124  0.471 0.490  0.738 0.754  226.700\n",
      "43  2.156 2.127  0.472 0.486  0.741 0.754  226.759\n",
      "44  2.141 2.117  0.474 0.485  0.744 0.754  226.677\n",
      "Epoch    44: reducing learning rate of group 0 to 1.0000e-04.\n",
      "Epoch    44: reducing learning rate of group 1 to 1.0000e-04.\n",
      "Epoch    44: reducing learning rate of group 2 to 1.0000e-04.\n",
      "Epoch    44: reducing learning rate of group 3 to 1.0000e-04.\n",
      "45  2.138 2.119  0.477 0.487  0.744 0.755  226.656\n",
      "46  2.139 2.110  0.475 0.491  0.744 0.755  226.606\n",
      "47  2.134 2.120  0.475 0.487  0.746 0.754  226.674\n",
      "early stopping!\n",
      "CPU times: user 2h 36min 59s, sys: 25min 25s, total: 3h 2min 25s\n",
      "Wall time: 3h 1min 19s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "def optimization_step_fn(model, loss, x_batch, y_batch):\n",
    "    return optimization_step(model, loss, x_batch, y_batch, optimizer)\n",
    "\n",
    "all_losses = train(\n",
    "    model, loss, optimization_step_fn,\n",
    "    train_iterator, val_iterator, n_epochs,\n",
    "    patience=9, threshold=0.01,  # for early stopping\n",
    "    lr_scheduler=lr_scheduler\n",
    ")\n",
    "# epoch logloss  accuracy    top5_accuracy time  (first value: train, second value: val)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loss/epoch plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nWvz/bcoYLWHqALoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1db48877b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs = [x[0] for x in all_losses]\n",
    "plt.plot(epochs, [x[1] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[2] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('loss');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRXwSYbqiN0IAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1db58d0b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, [x[3] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[4] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('accuracy');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1db471a320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, [x[5] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[6] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('top5_accuracy');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Save"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "model.cpu();\n",
    "torch.save(model.state_dict(), 'model.pytorch_state')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
